找回密码
 立即注册

QQ登录

只需一步,快速开始

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

15万转无感FOC: 风机水泵吸尘器,冰箱空调压缩机

  [复制链接]
51#
a20084666 发表于 2024-1-2 14:07:43 | 只看该作者
上桥180欧姆的电阻,感觉很大
回复 支持 反对

使用道具 举报

52#
 楼主| Angus 发表于 2024-1-2 20:34:00 | 只看该作者
功率管栅极电阻,要根据功率管特性调整。开关慢了发热多,开关快了可能会振荡,发热也会多。
回复 支持 反对

使用道具 举报

53#
 楼主| Angus 发表于 2024-1-4 11:00:11 | 只看该作者
本帖最后由 Angus 于 2024-1-5 16:08 编辑

最后的代码更新了什么?

代码中转速的计算方法是: 转过扇区边界时,数组Section_data[] 记录转过的精确角度和时间(PWM计数值);  记录 NUM_SECTION_AVERAGE +1 个扇区边界后,用 NUM_SECTION_AVERAGE 个扇区的角度、除时间,得出一秒转过的角度,再用一分钟转过的角度除360度得一分钟转过的圈数,就是 RPM 转速值了。
顺风起转时,要等转过 NUM_SECTION_AVERAGE +1 个扇区边界,才有 NUM_SECTION_AVERAGE 个扇区的角度和时间。所以在下图359行,Do_Spd_PI(累加到正开始做转速PI)赋值必须至少是 -NUM_SECTION_AVERAGE -1,否则开始做转速 PI 时转速数据不对,电流会突变、电流波形不连续。



另外把转速 PI 的运算频率,从10ms 一次,改为1ms 一次,加快了响应。
回复 支持 反对

使用道具 举报

54#
 楼主| Angus 发表于 2024-1-17 21:06:07 | 只看该作者
本帖最后由 Angus 于 2024-2-4 20:00 编辑

今天调试一个新板子,总结一下调试步骤:修改好电机Lq, Ld,绕线电阻RESISTER_COIL,以采样电阻及运放倍数CURRENT_Adc1000以后,核对以下事项

1,核对PWM,  PWM024 驱动上MOS,  PWM135 驱动下MOS。如果不是这样,代码改动稍大。
2,核对PWM 的输出极性,PWM 输出高时功率管导通,如果不是,在函数PWM_Init()中124~125行注释或放开反相函数。

3,核对电流运放的极性,电流流入电机时,运放输出电压增高。电流 ADC 的值为正。若正负反了,在ADC 中断里把Current_PWM01/PWM23/PWM45 数据取反。

4,核对电流 ADC 输入引脚与输出 PWM01/23/45 对应关系。

以上若没错,可以烧录代码,通电了。若转速旋钮=0,上电后在状态0,功率管关闭。这时可以在 ADC 中断代码中增加一个状态7(下面详述两处代码改动)。然后在仿真状态,依次写变量的值 Motor_Status=7,   Angle_q=0,PWM->MSKEN=0(PWM输出),  Id_set_f12 = CURRENT_Adc1000<<2 (电流值=1A), 这个时候,Current_PWM01的值刚好是1A电流对应的ADC 值。

调试电路,代码如下稍做修改。
ADC 中断里,364行这里是增加的状态7,什么都不用做,这个状态用于仿真状态直接变量的值


main.c 中主循环这里,307行,增加if(Motor_Status != 7)排除状态7,即状态7也是什么都不做。


CURRENT_Adc1000 = 0xB333, 此值相当于0.25A电流值,设定电流1A, 就是把 Iq_Set_f12写成其4倍的值 = 0x0002CCCC
如下图,10毫欧电阻放大5.6倍相当于56毫欧。
电流1A时,5V 参考源,12位ADC 值是: (1A*56毫欧/5000毫伏)*4096 = 45.875,  仿真看到 Current_PWM01 = 45,
在0度时,是用Current_PWM23/PWM45计算Ia,Ib的, 所以,只要Current_PWM23/PWM45的电流和=45电流控制就是对的,Current_PWM01的值若比45小是ADC转换的时间窗太短造成的。


输出电压 Vq_out_f17 =1441344,右移17位得0.1V的数值是 : 1441344/131072 = 11,  即输出电压Vq是1.1V,电机电阻是1欧,这个电压值也是对的。






回复 支持 反对

使用道具 举报

55#
 楼主| Angus 发表于 2024-2-8 18:00:25 | 只看该作者

有这个宏定义是 I/F 起动,启转阶段从功率管开始工作,电流就在控制范围内。即使换一个型号的电机、电感电阻有较大变化,也不易烧功率管,这是优点。建议初学者先用这个方法试着让电机起转。



若把此句注释掉,就是 V/F 起转,好处是起转快。因起转阶段不做电流 PI 控制、电流波动大,所以需小心确定起转电压。若换个型号的电机、电感电阻参数差异较大,需调整起转电压,否则可能过流。
回复 支持 反对

使用道具 举报

56#
匿名  发表于 2024-2-23 14:39:38
Angus 发表于 2022-10-27 21:48
电压的基准值是 0.1V。最大值是 16383,若超过此值, 乘4后大于等于65536做坐标旋转会溢出,即最大工作电压 ...

楼主,每次都要采样母线电压的值吗?不太明白,母线电压不是固定不变的吗?请楼主解惑。另外,原理图对不上啊,能否分享一张实际的原理图,采样的是那个点,采样的是相线电压还是母线电压,谢谢!
回复 支持 反对

使用道具

57#
 楼主| Angus 发表于 2024-2-23 18:44:00 | 只看该作者
游客 223.112.186.x 发表于 2024-2-23 14:39
楼主,每次都要采样母线电压的值吗?不太明白,母线电压不是固定不变的吗?请楼主解惑。另外,原理图对不 ...

如果是交流220V 整流得到的直流,有人为节省成本母线电容用的小,母线电压波动大,这时最好每次PWM 都测一次电压比较好。

此代码是三电阻或双电阻测电流,在PWM 计数起点测电流,即下MOS 导通中间。

我测试的板子,稍做了改动,只要测到母线电压和三相电流,就能转起来。ADC 引脚用哪个、就配置哪个就行。
回复 支持 反对

使用道具 举报

58#
匿名  发表于 2024-2-28 08:41:04
Angus 发表于 2024-2-23 18:44
如果是交流220V 整流得到的直流,有人为节省成本母线电容用的小,母线电压波动大,这时最好每次PWM 都测 ...

谢谢楼主。
回复 支持 反对

使用道具

59#
匿名  发表于 2024-3-6 15:41:33
关于PARK变换,求出id,iq,我下载的代码如下:(无法发送图片,只能复制)
////===求Idq,前俩实参最大正负65535(可同时最大),否则计算溢出 ========
// *_I_alpha,  输入 I_alpha 返回 Id
// *_I_beta,   输入 I_beta 返回 Iq           
//  _q_Angle   q 轴角度,[0 ~ 65536)表示[0~360)度
void Static_to_Dynamic(int32_t *_I_alpha, int32_t *_I_beta, int32_t _q_Angle)
{
  int32_t  C11,  C21 ;
  int32_t  Ia = *_I_alpha,  Ib = *_I_beta ;
  
  C11 =  _q_Angle ;
  C21 = Get_cos(&C11) ;
                                                              // 65535*0x8000+16384= 0x7FFFC000
  *_I_alpha = ((Ia*C11+16384)>>15)+((-Ib*C21+16384)>>15);     // 65536 * 0x8000   = 0x80000000 溢出
  *_I_beta  = ((Ia*C21+16384)>>15)+ ((Ib*C11+16384)>>15);     //-65536 *(-0x8000) = 0x80000000 溢出
}                                                             //-65535 *(-0x8000) = 0x7FFF8000

上面的的两个等式*_I_alpha和 *_I_beta  =,和公式不一致,楼主能给讲讲吗?谢谢@
回复 支持 反对

使用道具

60#
 楼主| Angus 发表于 2024-3-7 08:33:09 | 只看该作者
本帖最后由 Angus 于 2024-4-1 10:11 编辑
游客 223.112.186.x 发表于 2024-3-6 15:41
关于PARK变换,求出id,iq,我下载的代码如下:(无法发送图片,只能复制)
////===求Idq,前俩实参最大正负65 ...

正余弦值 C11,C12,C21,C22有15位小数,所以Ia,Ib乘c11~C22后右移15位去掉小数, 加16384是四舍五入。

若不用浮点运算,整数除法,得到的只有整数的商和余数,比如 20~24 除10,=2.0~2.4, 商是整数部分2。25~29 除10,=2.5~2.9,商也是整数部分2,如何让整数部分是 3 呢?

整数运算没法加0.5,那就在被除数上,加除数的一半(等于加了0.5)。25~29, 加5后再除10 =3.0~3.4,整数部分刚好是3。而20~24 加5后除10 = 2.5~2.9,整数部分仍是 2。


也就是说,整数除法的四舍五入,是在除之前,先在被除数上加除数的一半,再做除法,结果就四舍五入了。

所以,右移15是除32768,四舍五入就在被除数上先加 16384。
回复 支持 反对

使用道具 举报

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

本版积分规则

新唐MCU