智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3999|回复: 7
打印 上一主题 下一主题

[软件类] 重读官方的方案。不知道对不对,特拿过来讨论讨论

[复制链接]

21

主题

274

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3307
威望
1082
贡献
1863
兑换币
72
注册时间
2011-3-26
在线时间
181 小时
跳转到指定楼层
1#
发表于 2012-3-24 05:12:44 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
void TI1_OnInterrupt(void)
{
int i;
  /* Write your code here ... */
   //--------------------------------------------------------------------------
   WAITTIME_INC;                               // Increase WAITTIME function counter;
   if(TIME1MS_INT_FLAG)  return;
   
   //--------------------------------------------------------------------------
   g_n1MSEventCount ++;
if(g_nTimeTestFlag)  TIMETEST_ON;
     
   //--------------------------------------------------------------------------
   g_nSpeedControlPeriod ++;
   SpeedControlOutput();
   
   g_nDirectionControlPeriod ++;
   DirectionControlOutput();

  //--------------------------------------------------------------------------
   if(g_n1MSEventCount >= CONTROL_PERIOD) {    // Motor speed adjust
    g_n1MSEventCount = 0;                   // Clear the event counter;
   
    GetMotorPulse();
   } else if(g_n1MSEventCount == 1) {          // Start ADC convert and Car erect adjust
    if(AD_FLAG) {
   for(i = 0; i < INPUT_VOLTAGE_AVERAGE; i ++)
    SampleInputVoltage();
    }
   } else if(g_n1MSEventCount == 2) {          // Get the voltage and start calculation
  if(AD_FLAG) GetInputVoltageAverage();
  //----------------------------------------------------------------------
  AngleCalculate();
  AngleControl();  
  //----------------------------------------------------------------------
  MotorOutput();                          // Output motor control voltage;   
   } else if(g_n1MSEventCount == 3) {          // Car speed adjust
    g_nSpeedControlCount ++;
    if(g_nSpeedControlCount >= SPEED_CONTROL_COUNT) {
     SpeedControl();
     g_nSpeedControlCount = 0;
     g_nSpeedControlPeriod = 0;     
    }
   } else if(g_n1MSEventCount == 4) {          // Car direction control
  g_nDirectionControlCount ++;
  DirectionVoltageSigma();
  if(g_nDirectionControlCount >= DIRECTION_CONTROL_COUNT) {
     DirectionControl();
     g_nDirectionControlCount = 0;
     g_nDirectionControlPeriod = 0;
    }
   }
   
  //--------------------------------------------------------------------------
  if(g_nTimeTestFlag)  TIMETEST_OFF;
}


此中断时间为1ms,中断服务程序中片段0-4,严格的按照时序,5ms执行一次。但SpeedControlOutput();DirectionControlOutput();两个函数,而是每1ms执行一次,与
官网上说的每5ms执行一次相悖。不知道大家注意没有。不知道是不是这样的,求大神指点。。。

21

主题

274

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3307
威望
1082
贡献
1863
兑换币
72
注册时间
2011-3-26
在线时间
181 小时
8#
 楼主| 发表于 2012-3-24 16:21:53 | 只看该作者
谢谢指点。。。。。。实验之。。。。
回复 支持 反对

使用道具 举报

2

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2811

论坛骨干奖章优秀会员奖章技术大牛奖章

威望
1705
贡献
606
兑换币
245
注册时间
2011-3-28
在线时间
250 小时
7#
发表于 2012-3-24 11:15:01 | 只看该作者
lzy0310 发表于 2012-3-24 11:08
老师,,现在我的车子直立的很稳了,但是加速度控制不知怎么加。加了跟没加没什么影响。官网的方案 好像最 ...

在仔细看看指南方案中的框图,最终的控制方案是将速度差速进行PI之后直接叠加在最终的电机输出控制上了。
请你参考指南中的程序来理解即可。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

8

主题

82

帖子

0

精华

高级会员

Rank: 4

积分
793
威望
479
贡献
158
兑换币
2
注册时间
2011-9-11
在线时间
78 小时
6#
发表于 2012-3-24 11:08:33 | 只看该作者
吉他手 发表于 2012-3-24 09:09
你看到的SpeedControlOutput,DirectionControlOutput函数1ms调用一次,是正确的。
只是这个函数的输出是通 ...

老师,,现在我的车子直立的很稳了,但是加速度控制不知怎么加。加了跟没加没什么影响。官网的方案 好像最后是直接通过采集编码器速度 然后与给定速度相差来实现 速度控制,进而获得一个倾角,实现控速。。
请问我这样理解的对吗??还是怎么理解。。
回复 支持 反对

使用道具 举报

19

主题

667

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2730

热心会员奖章特殊贡献奖章论坛骨干奖章推广达人奖章在线王奖章活跃会员奖章优秀会员奖章

威望
1504
贡献
364
兑换币
29
注册时间
2012-2-4
在线时间
431 小时
毕业学校
外国语学校
5#
发表于 2012-3-24 10:17:46 | 只看该作者
回复 支持 反对

使用道具 举报

19

主题

259

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2859

论坛骨干奖章推广达人奖章特殊贡献奖章优秀版主奖章热心会员奖章

威望
847
贡献
1700
兑换币
2
注册时间
2011-10-16
在线时间
156 小时
4#
发表于 2012-3-24 09:22:25 | 只看该作者
回复 支持 反对

使用道具 举报

11

主题

135

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1251
QQ
威望
895
贡献
202
兑换币
0
注册时间
2012-2-3
在线时间
77 小时
毕业学校
猪一样活着
3#
发表于 2012-3-24 09:14:06 | 只看该作者
吉他手 发表于 2012-3-24 09:09
你看到的SpeedControlOutput,DirectionControlOutput函数1ms调用一次,是正确的。
只是这个函数的输出是通 ...

老师,电机对编码器的干扰怎样能减轻呢?   电机外壳接地行么?
回复 支持 反对

使用道具 举报

2

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2811

论坛骨干奖章优秀会员奖章技术大牛奖章

威望
1705
贡献
606
兑换币
245
注册时间
2011-3-28
在线时间
250 小时
2#
发表于 2012-3-24 09:09:26 | 只看该作者
本帖最后由 吉他手 于 2012-3-24 09:10 编辑

你看到的SpeedControlOutput,DirectionControlOutput函数1ms调用一次,是正确的。
只是这个函数的输出是通过SetMotorVoltage最终输出的。而最终输出的函数的周期是5ms。
所以本质上讲SpeedControlOutput,DirectionControlOutput函数是5ms起作用一次。如下图所示:(在设计指南中的有)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 13:05 , Processed in 0.066291 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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