梁工
发表于 2024-12-9 21:03:15
xiaobaoXu 发表于 2024-12-9 17:53
怎样能改变输出电压的大小,例程只能改变频率
改变正弦表数据的大小(即改变正弦波幅度),就可以调整电压。
xiaobaoXu
发表于 2024-12-10 10:08:37
梁工 发表于 2024-12-9 21:03
改变正弦表数据的大小(即改变正弦波幅度),就可以调整电压。
好的感谢
科学妞妞
发表于 2024-12-12 07:12:43
<p><img alt="ciya" class="emoji" src="https://www.stcaimcu.com/static/image/smiley/default/ciya.gif" title="ciya" /></p>
临月三
发表于 2024-12-29 15:19:14
可以可以{:4_174:}{:4_174:}
lgnstar
发表于 2024-12-30 11:25:50
{:qiang:}
cpu51
发表于 2025-1-15 11:56:01
梁工 发表于 2024-10-29 17:14
Ai8051UPWMA-P2口输出3相互补SPWM变频驱动:
先别修改程序, 直接下载"Objects"里的"pwm.hex"测试, 下载 ...
请问梁工,这个例程是不是要KEIL C251版本才能编译?
lzts
发表于 2025-1-15 13:29:42
谢谢大神分享,
梁工
发表于 2025-1-15 14:20:56
cpu51 发表于 2025-1-15 11:56
请问梁工,这个例程是不是要KEIL C251版本才能编译?
是的,我所有AI8051U的例子都是32位方式,要使用C251编译。
pyxyn
发表于 2025-5-5 15:54:31
梁工 发表于 2024-12-9 21:03
改变正弦表数据的大小(即改变正弦波幅度),就可以调整电压。
梁工你好,我想改变一下正弦波幅度的大小,以下是改成0.5倍。但是出来的波形只能说是个正弦的样子了,没有之前的那样平滑,是我改的地方有问题吗?谢谢。
/******************** 中断函数 **************************/
void PWMA_ISR() interrupt PWMA_VECTOR
{
u8 sr1;
sr1 = PWMA_SR1; //为了快速, 中断标志用一个局部变量处理
PWMA_SR1 = 0; //清除中断标志
PWMA_SR2 = 0; //清除中断标志
if(sr1 & 0x01) //更新中断标志
{
SineSum += (u16)SineFreq; //正弦波频率, 1~255Hz
if(SineSum >= 15480) SineSum = 0 ; //23040
SineIndex = SineSum / 43;
PWMA_CCR1H = (u8)(T_SIN_0/2 >> 8); // 计数器比较值, 控制占空比
PWMA_CCR1L = (u8)T_SIN_0/2; // 计数器比较值, 控制占空比
PWMA_CCR2H = (u8)(T_SIN_120/2 >> 8); //
PWMA_CCR2L = (u8)T_SIN_120/2; //
PWMA_CCR3H = (u8)(T_SIN_240/2 >> 8); //
PWMA_CCR3L = (u8)T_SIN_240/2; //
}}
梁工
发表于 2025-5-5 23:47:21
pyxyn 发表于 2025-5-5 15:54
梁工你好,我想改变一下正弦波幅度的大小,以下是改成0.5倍。但是出来的波形只能说是个正弦的样子了,没 ...
有三句没有加括号,会先转成8位(丢失高字节),再除以2,这是错误的。
PWMA_CCR1H = (u8)(T_SIN_0/2 >> 8); // 计数器比较值, 控制占空比
PWMA_CCR1L = (u8)(T_SIN_0/2); //要加括号
PWMA_CCR2H = (u8)(T_SIN_120/2 >> 8); //
PWMA_CCR2L = (u8)(T_SIN_120/2); //要加括号
PWMA_CCR3H = (u8)(T_SIN_240/2 >> 8); //
PWMA_CCR3L = (u8)(T_SIN_240/2); //要加括号
更好的方法是,定义一个数组变量,先计算好,然后直接读这个数组,不用每次都计算。