智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1255|回复: 0
打印 上一主题 下一主题

[综合类] 舵机不转

[复制链接]

24

主题

70

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2252
威望
1149
贡献
673
兑换币
719
注册时间
2015-11-29
在线时间
215 小时
毕业学校
理工大学
跳转到指定楼层
1#
发表于 2016-1-15 19:29:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /*!             引脚连接说明
  2.                   UART0   
  3.                       TX   A14
  4.                       RX   A15
  5.                   CCD
  6.                       A0   E16   ADC0               
  7.                       SI   E22
  8.                       CLK  E23
  9.                   舵机PWM
  10.                       TPM1_CH0  A12

  11.                   电机PWM
  12.                       TPM0_CH0  C1
  13.                       TPM0_CH1  C2
  14.                       TPM0_CH2  C3
  15.                       TPM0_CH3  C4
  16. */

  17. #include "common.h"
  18. #include "include.h"
  19. //电机相关
  20. #define MOTOR_TPM   TPM0
  21. #define MOTOR1_PWM  TPM_CH0            
  22. #define MOTOR2_PWM  TPM_CH1            
  23. #define MOTOR3_PWM  TPM_CH2
  24. #define MOTOR4_PWM  TPM_CH3
  25. #define MOTOR1_PWM_IO  TPM0_CH0
  26. #define MOTOR2_PWM_IO  TPM0_CH1
  27. #define MOTOR3_PWM_IO  TPM0_CH2
  28. #define MOTOR4_PWM_IO  TPM0_CH3
  29. #define MOTOR_HZ    (20*1000)
  30. //舵机相关
  31. #define S3010_TPM   TPM1          //
  32. #define S3010_CH    TPM_CH0       //  PTB0
  33. #define S3010_HZ    (100)
  34. uint8 CCD_BUFF[TSL1401_SIZE];   //存储CCD图像的数组
  35. uint8 s3010_middle = 73;  //舵机中心值:对应的PWM占空比为(73/1000)  精度为1000u
  36. uint8 picture_middle = 64;//图像中心值
  37. uint8 leftline = 1;    //赛道左边界
  38. uint8 rightline = 127;   //赛道右边界
  39. struct s3010_pid        //舵机PD控制
  40. {
  41.         int err; //定义偏差值
  42.         int err_last; //定义上一个偏差值
  43.         float Kp; //定义比例系数
  44.         float Kd;//定义微分系数
  45. }pid;

  46. void PID_init();         //舵机PD算法初始化
  47. uint32 PID_realize(int x);//舵机PD实现初始化
  48. void PIT_IRQHandler();
  49. void vcan_sendccd(uint8 *ccdaddr, uint32 ccdsize);
  50. void bin(uint8 * bin, uint8 len);

  51. void  main(void)
  52. {
  53.     uint8 time = 8;            // 修改 PIT0 的定时时间即可修改曝光时间
  54.     uint32 s3010_pwm = s3010_middle;
  55.    
  56.     tpm_pwm_init(MOTOR_TPM, MOTOR1_PWM,MOTOR_HZ,100);      //初始化 电机 PWM
  57.     tpm_pwm_init(MOTOR_TPM, MOTOR2_PWM,MOTOR_HZ,100);      //初始化 电机 PWM
  58.     tpm_pwm_init(MOTOR_TPM, MOTOR3_PWM,MOTOR_HZ,100);      //初始化 电机 PWM
  59.     tpm_pwm_init(MOTOR_TPM, MOTOR4_PWM,MOTOR_HZ,100);      //初始化 电机 PWM
  60.    
  61.     tsl1401_set_addrs(TSL1401_MAX,CCD_BUFF);        //初始化线性CCD
  62.     tsl1401_init(time);                         //初始化 线性CCD ,配置 中断时间为 time

  63.     //配置 中断函数 和 使能中断
  64.     set_vector_handler(PIT_VECTORn,PIT_IRQHandler);
  65.     enable_irq(PIT_IRQn);

  66.     tpm_pwm_init(S3010_TPM, S3010_CH,S3010_HZ,100);      //初始化 舵机 PWM
  67.    
  68.     while(1)
  69.     {  

  70.         tsl1401_get_img();//采集 线性CCD 图像      
  71.         bin((uint8 *)&CCD_BUFF[0], TSL1401_SIZE);  //处理图像,找赛道边界
  72.    
  73.         s3010_pwm = PID_realize(64 - picture_middle);
  74.         tpm_pwm_duty(S3010_TPM, S3010_CH,s3010_pwm);
  75.         DELAY_MS(200);

复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-26 15:44 , Processed in 0.039196 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表