找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

简单的M451工程模板_ 电机弦波控制源码

  [复制链接]
跳转到指定楼层
#
Angus 发表于 2014-8-13 18:58:15 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 Angus 于 2015-2-3 19:23 编辑

本代码配置好了时钟,GPIO,Timer1,UART,PWM

芯唐 M4 芯片 PWM 特点:
1> 六路 PWM 同步起动,也可各自不同频率工作。
2> 中心对齐,分开控制上计数 PWM 跳变时刻,和下计数 PWM 跳变时刻,分辩率提高一倍,还可产生右偏的 PWM 波。
3> 额外一个数值比较器控制测电流 ADC 的触发时刻点。
4> 占空比寄存器的值,可让PWM输出全低和全高。



本代码
// PWM 周期 2000,  PWM 时钟 36M,所以 PWM 频率为 18KHz。
// 12 位的正弦函数表。
// PWM024 驱动上臂,输出高时 MOSFET 导通,PWM135 驱动下臂,输出低时 MOSFET 导通
// PA0_HA,PA1_HB,PA2_HC, 60度 Hall (HC信号是反相的)


M451_template.zip (246.98 KB, 下载次数: 7646)





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 顶 踩
回复

使用道具 举报

推荐
 楼主| Angus 发表于 2015-1-7 09:58:55 | 只看该作者
本帖最后由 Angus 于 2015-1-18 13:23 编辑
nt52241930 发表于 2015-1-6 15:38
您好,
請教一下,
目前已將PWM設定為 上下計數互補模式,PWM頻率為8K,PWM中斷亦設定完畢(中心中斷),輸出波形 ...


PWM最大值发生中断, 但PWM计数器没停止计数,  硬件入栈8个寄存器, 执行到中断里, 遇到断点,这时防真器再去读PWM计数器, PWM计数器应已减计数多个PWM时钟了, 所以这时读到的PWM计数器的值比最大值小一点。
回复 支持 1 反对 0

使用道具 举报

30#
 楼主| Angus 发表于 2015-2-9 15:38:09 | 只看该作者
nt52241930 发表于 2015-2-3 10:13
您好,
基礎性的大概了解,只是想清楚,此程式真正動作原理
網上資料,基本上也都大同小異~~~

做电机控制入门并不难,但要做好做精,还是要经过一段时间的测试研究的,用我们芯片的客户,我们都会一一回答客户的疑問。
回复 支持 反对

使用道具 举报

29#
nt52241930 发表于 2015-2-3 10:13:37 | 只看该作者
本帖最后由 nt52241930 于 2015-2-3 10:17 编辑
xiaoxiao2013 发表于 2015-2-3 09:15
基础性的东西要自己找资料,不能总是免费问别人啊

您好,
基礎性的大概了解,只是想清楚,此程式真正動作原理
網上資料,基本上也都大同小異~~~

若您覺得,"免費"回答,不妥,您可以選擇不回答~~~
不勉強的!!!~~~
只是想來互相學習,了解
感謝~~~

我們也在尋找,這塊能支援我們開發的
若有必要,上課收費..等等,是可以接受的
回复 支持 反对

使用道具 举报

28#
xiaoxiao2013 发表于 2015-2-3 09:15:11 | 只看该作者
nt52241930 发表于 2015-2-3 08:20
是阿,
還需多請教您們

基础性的东西要自己找资料,不能总是免费问别人啊
回复 支持 反对

使用道具 举报

27#
nt52241930 发表于 2015-2-3 08:20:55 | 只看该作者

是阿,
還需多請教您們
回复 支持 反对

使用道具 举报

26#
xiaoxiao2013 发表于 2015-2-2 17:48:20 | 只看该作者
nt52241930 发表于 2015-2-2 17:22
ok,了解~~

那在請問您

你太新手了
回复 支持 反对

使用道具 举报

25#
nt52241930 发表于 2015-2-2 17:22:06 | 只看该作者
ok,了解~~

那在請問您
AngleStep = ((10<<8)*2000/6)/temp32u ;

(10<<8)*2000/6)
您這部分,指的是??
2000為pwm period
6為1/6圈???

還需麻煩您,感謝

回复 支持 反对

使用道具 举报

24#
 楼主| Angus 发表于 2015-2-2 15:46:46 | 只看该作者
本帖最后由 Angus 于 2015-2-2 17:36 编辑
nt52241930 发表于 2015-2-2 15:19
您好,
意思是,使用上一次的hall來做為此次hall的依據
假設,上一個hall,跑了50個pwm pulse(pwm頻率為20khz, ...


假定上一次Hall边沿中断时刻为 Timwr1_0, 本次Hall边沿中断时刻为 Timer1_1, 则电机转过 60度的时间就是 Timer1_1 - Timer1_0。
如果PWM的频率与Timer1的计数频率一样, 过一个PWM周期以后, 转过的角度就是 (60度 X PWM周期)/(Timer1_1 - Timer1_0) 。如果两个计数频率不一样,要先换算成相同的计数频率。
回复 支持 反对

使用道具 举报

23#
nt52241930 发表于 2015-2-2 15:19:32 | 只看该作者
本帖最后由 nt52241930 于 2015-2-2 15:31 编辑
Angus 发表于 2015-2-2 14:54
用Timer1来测量Hall,可以测得每次Hall变化时,上次转过1/6圈所用的时间——T,PWM每过一个周期,也可以 ...

您好,
意思是,使用上一次的hall來做為此次hall的依據
假設,上一個hall,跑了50個pwm pulse(pwm頻率為20khz,20khz*50=hall時間)
此次hall,以計數到25個,則表示此次hall改變後已跑了30度的意思麻!!??

您的(60*t/T),此60是代表角度??

以上再麻煩,thanks
回复 支持 反对

使用道具 举报

22#
 楼主| Angus 发表于 2015-2-2 14:54:07 | 只看该作者
nt52241930 发表于 2015-2-2 12:06
您好,
我可以將sin表,視為轉子轉180度的間格
計算每個hall時間(1/6),從換相開始去計算pwm次數(此次數可決 ...

用Timer1来测量Hall,可以测得每次Hall变化时,上次转过1/6圈所用的时间——T,PWM每过一个周期,也可以换算成Timer1标定的时间——t, (60*t/T)就是每次PWM转过的角度。
回复 支持 反对

使用道具 举报

21#
nt52241930 发表于 2015-2-2 12:06:57 | 只看该作者
Angus 发表于 2015-1-30 13:11
SIN表不用改。
每个PWM周期算一下电机转过多少角度,根据角度查SIN表,速度不一样,每个PWM转过的角度也 ...

您好,
我可以將sin表,視為轉子轉180度的間格
計算每個hall時間(1/6),從換相開始去計算pwm次數(此次數可決定轉速)
角度部分,該如何使用pwm週期來計算 目前轉子角度呢????

以上再麻煩,不吝嗇指教

感謝
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU