牛卧堂MCU技术交流

标题: 简单的M451工程模板_ 电机弦波控制源码 [打印本页]

作者: Angus    时间: 2014-8-13 18:58
标题: 简单的M451工程模板_ 电机弦波控制源码
本帖最后由 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, 下载次数: 7650)






作者: keyway    时间: 2014-11-1 16:05
数值比较器控制测电流 ADC 的触发时刻点
请问怎么比较触发点?中间对齐后上下臂导通可能与实际电压无关?
作者: Angus    时间: 2014-11-3 12:58
keyway 发表于 2014-11-1 16:05
数值比较器控制测电流 ADC 的触发时刻点
请问怎么比较触发点?中间对齐后上下臂导通可能与实际电压无关? ...

你可以在中点做ADC, 也可以在某一路 PWM 的跳变沿前后做ADC. 哪一时刻做ADC, 看你的控制方法了, 配置数值比较器, 可以在你预想的时刻点做ADC.
作者: keyway    时间: 2014-12-8 10:43
本帖最后由 keyway 于 2014-12-8 10:45 编辑

这样不准阿,目前我将三相PWM拿来当另外一个触发控制讯号,但是如果三个同时触发可能有问题?


作者: Angus    时间: 2014-12-8 13:41
keyway 发表于 2014-12-8 10:43
这样不准阿,目前我将三相PWM拿来当另外一个触发控制讯号,但是如果三个同时触发可能有问题?

...

不知你想在哪个时刻点触发ADC,中点,还是第二个PWM的前后沿?
你是测电压,还是测电流? 单电阻电流采样,还是三电阻?  
作者: keyway    时间: 2014-12-8 13:56
Angus 发表于 2014-12-8 13:41
不知你想在哪个时刻点触发ADC,中点,还是第二个PWM的前后沿?
你是测电压,还是测电流? 单电阻电流采 ...

我想取得 U V W 三相电流
PI 里的 ID 与 IQ 是用来控制什么的?

作者: Angus    时间: 2014-12-8 14:15
keyway 发表于 2014-12-8 13:56
我想取得 U V W 三相电流
PI 里的 ID 与 IQ 是用来控制什么的?

如果你采用三电阻测电流, 在下边MOS导通时做ADC即可, 这个简单,如果你采用单电阻测电流,就复杂点,ADC采样点要跟踪第二次上下MOS切换的那一路PWM,每次PWM中断里,改变占空比时,都要重新计算一下做ADC的时刻点。
作者: keyway    时间: 2014-12-8 14:29
Angus 发表于 2014-12-8 14:15
如果你采用三电阻测电流, 在下边MOS导通时做ADC即可, 这个简单,如果你采用单电阻测电流,就复杂点,ADC ...

所以我将 U V M PWM ON或OFF 触发 ADC 读取,这样比较准但是浪费3的I/O.


作者: Angus    时间: 2014-12-8 14:40
keyway 发表于 2014-12-8 14:29
所以我将 U V M PWM ON或OFF 触发 ADC 读取,这样比较准但是浪费3的I/O.

芯片发出 PWM,到 MOS 开关有1us左右的延迟,1us ADC就结束了,所以三相 PWM 的边沿触发 ADC 是不准的。
我们的芯片特意做了一个用于触发 ADC,而不输出波形的 PWM 寄存器,用这个寄存器产生触发 ADC 的边沿信号。
作者: keyway    时间: 2014-12-8 14:51
本帖最后由 keyway 于 2014-12-8 15:02 编辑
Angus 发表于 2014-12-8 14:40
芯片发出 PWM,到 MOS 开关有1us左右的延迟,1us ADC就结束了,所以三相 PWM 的边沿触发 ADC 是不准的。
...

因为上臂与下臂其中2个同时打开才是真正电流读取位置.

另外TabSin[]是多余的,因为Ia+Ib+Ic=0
你可以将 Ia Ib Ic 直接传给 PWM  Duty 输出,最后.....就是完美正弦波了(因为马达转动输出就是 SIN)

目前我在尝试做 sensorless,比 BLDC 更高一的等级

作者: Angus    时间: 2014-12-8 16:02
keyway 发表于 2014-12-8 14:51
因为上臂与下臂其中2个同时打开才是真正电流读取位置.

另外TabSin[]是多余的,因为Ia+Ib+Ic=0

您是做FOC控制,还是直接转矩控制?
作者: keyway    时间: 2014-12-8 16:27
本帖最后由 keyway 于 2014-12-8 16:32 编辑

FOC 向量控制(vector control)也称为磁场导向控制(field-oriented control,简称FOC)
无感测器向量控制是利用三相电压及输出电流,配合开回路的估测器(estimator)或是闭回路的观测器(observer)来得到转速的资讯,开回路估测器中会计算转速,但不会作回授控制,闭回路观测器则会计算转速,并依此计算某物理量,利用此计算量计算值和向量控制中对应值的差异进行回授控制。无感测器向量控制由于不需要有加装编码器的马达.在成本及可靠度上很有竞争力

作者: Angus    时间: 2014-12-8 16:55
keyway 发表于 2014-12-8 16:27
FOC 向量控制(vector control)也称为磁场导向控制(field-oriented control,简称FOC)
无感测器向量控制 ...

{:soso_e179:}
作者: cccfeb    时间: 2015-1-4 17:00
我近几天看M451_Moror_VF代码,请问PD输出那些脚控制电机?有没有电路原理图?
作者: Angus    时间: 2015-1-5 13:53
cccfeb 发表于 2015-1-4 17:00
我近几天看M451_Moror_VF代码,请问PD输出那些脚控制电机?有没有电路原理图? ...

M451有PWM0和PWM1两组PWM,每组六路PWM,这个代码用的是PWM0,是PC012345,从代码中也可以看出来,注释有说明。
作者: nt52241930    时间: 2015-1-6 15:38
您好,
請教一下,
目前已將PWM設定為 上下計數互補模式,PWM頻率為8K,PWM中斷亦設定完畢(中心中斷),輸出波形正常
但,
我將斷點設於,PWM中斷副程式第一行,去看CNT的數值
此數值不是應該於我所設定的PERIOD的值(中心中斷)嗎!??
作者: Angus    时间: 2015-1-7 09:58
本帖最后由 Angus 于 2015-1-18 13:23 编辑
nt52241930 发表于 2015-1-6 15:38
您好,
請教一下,
目前已將PWM設定為 上下計數互補模式,PWM頻率為8K,PWM中斷亦設定完畢(中心中斷),輸出波形 ...


PWM最大值发生中断, 但PWM计数器没停止计数,  硬件入栈8个寄存器, 执行到中断里, 遇到断点,这时防真器再去读PWM计数器, PWM计数器应已减计数多个PWM时钟了, 所以这时读到的PWM计数器的值比最大值小一点。
作者: nt52241930    时间: 2015-1-22 11:15
Angus 发表于 2015-1-7 09:58
PWM最大值发生中断, 但PWM计数器没停止计数,  硬件入栈8个寄存器, 执行到中断里, 遇到断点,这时防真器再 ...

您好,
目前我司,欲用此m451開發sin波bldc
看了您的程式,
可以跟您請教一下,您裡面的table裱,建立的用意,及原理嗎!!???
作者: nt52241930    时间: 2015-1-23 16:34
您好,目前了解您TABLE表為180度,
您HALL訊號部分,3與4 皆為0,
但HALL異常時,應是000 OR 111
此時您陣列0跟7 卻是正常輸出???

此部分還需跟您請教一下
作者: Angus    时间: 2015-1-29 12:46
nt52241930 发表于 2015-1-23 16:34
您好,目前了解您TABLE表為180度,
您HALL訊號部分,3與4 皆為0,
但HALL異常時,應是000 OR 111

Hall 信号有两种,一种是60度Hall,有全0全1;另一种是120度Hall,无全0全1
作者: nt52241930    时间: 2015-1-29 14:08
本帖最后由 nt52241930 于 2015-1-29 14:29 编辑
Angus 发表于 2015-1-29 12:46
Hall 信号有两种,一种是60度Hall,有全0全1;另一种是120度Hall,无全0全1

您好,

跟您請教,您使用SIN表方式,輸入給PWM
那調速部分??若改變速度,是否意味著SIN表需更改??

以上在麻煩您~~~

作者: Angus    时间: 2015-1-30 13:11
nt52241930 发表于 2015-1-29 14:08
您好,

跟您請教,您使用SIN表方式,輸入給PWM

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

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

以上再麻煩,不吝嗇指教

感謝
作者: Angus    时间: 2015-2-2 14:54
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转过的角度。
作者: nt52241930    时间: 2015-2-2 15:19
本帖最后由 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
作者: Angus    时间: 2015-2-2 15: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) 。如果两个计数频率不一样,要先换算成相同的计数频率。
作者: nt52241930    时间: 2015-2-2 17:22
ok,了解~~

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

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

還需麻煩您,感謝


作者: xiaoxiao2013    时间: 2015-2-2 17:48
nt52241930 发表于 2015-2-2 17:22
ok,了解~~

那在請問您

你太新手了
作者: nt52241930    时间: 2015-2-3 08:20
xiaoxiao2013 发表于 2015-2-2 17:48
你太新手了

是阿,
還需多請教您們
作者: xiaoxiao2013    时间: 2015-2-3 09:15
nt52241930 发表于 2015-2-3 08:20
是阿,
還需多請教您們

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

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

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

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

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

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




欢迎光临 牛卧堂MCU技术交流 (http://nuvoton-mcu.com/) Powered by Discuz! X3.2