非常遗憾 搞PWM 三四天P2.2还是没有输出 | 有输出了
感谢大家都鼓励和帮助下载了很多例程
各种控制比较复杂
寄存器非常多
一时还消化不了
目前我只想由浅入深
先把P2.0和P2.2PWM控制电机正反转实现
程序改了又改 试了又试
搞到筋疲力尽 还是没有输出
程序先进行引脚配置
PWMA_PS |= PWM1_2; //选择 PWM1_2 通道
PWMA_PS |= PWM2_2; //选择 PWM2_2 通道
后面的EER MR寄存器还搞不懂
刚刚做了一块PCB板
用P2.0P2.2分别控制电机正反转
先按照官方程序测试效果
目前只实现IO口点亮
还是不知道怎么修改参数
达到工作要求
脉冲频率和占空比可变
参考查阅寄存器 和PWM工作原理
发现PWM控制牵涉的寄存器比较多
做文档研究两三天还不是很明白
#include "STC8H.h" //
#include "intrins.h" //
#define uchar unsigned char //
#define uintunsigned int //
#define ENO1P 0x01
#define ENO2P 0x04
#define PWM1_2 0x01 //P:P2.0N:P2.1
#define PWM2_2 0x04 //P:P2.2N:P2.3
sbit OutPut0=P2^0; //
sbit OutPut1=P2^2;
uchar SS;
/*-----------(1)延时子程序12MHz 加千百十个显示--------*/
void Delay100ms(uint x) //
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<11000;j++);
}
/*************关所有输出*******************************/
void Init_io()
{
P1M0=0X00; //
P1M1=0X00; //
P2M0=0x05;
P2M1=0x00;
P3M0=0X00; //
P3M1=0X00; //
P5M0=0X00; //
P5M1=0X00; //
}
/******************** 主函数 **************************/
void main(void)
{
P_SW2|=0X80;
EA=1;
Init_io();
for(SS=0;SS<5;SS++)
{
OutPut0=0;
OutPut1=0;
Delay100ms(50);
OutPut0=1;
OutPut1=1;
Delay100ms(50);
}
//
PWMA_PS |= PWM1_2; //选择 PWM1_2 通道
PWMA_PS |= PWM2_2; //选择 PWM2_2 通道
PWMA_CCER1=0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
// PWMA_CCER2=0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
PWMA_CCMR1=0x60; //设置 PWM1 模式1 输出
PWMA_CCMR2=0x60; //设置 PWM1 模式1 输出
PWMA_CCER1=0x01; //使能 CC1E 通道, 高电平有效
// PWMA_CCER2=0x01; //写 CCMRx 前必须先清零 CCxE 关闭通道
PWMA_CCR1=100; //设置占空比时间
PWMA_CCR2=100; //设置占空比时间
PWMA_ARR=2000; //设置周期时间
PWMA_ENO |= ENO1P; //使能输出
PWMA_ENO |= ENO2P; //使能输出
PWMA_BKR = 0x80; //使能主输出
PWMA_CR1 |= 0x81; //ARR预装载,开始计时
while(1)
{
} //
} //
PWMA_CCER1错误,应为0x11
https://www.stcaimcu.com/forum.p ... id=19209&pid=177800
频率(PWM时钟使用SYSCLK):
占空比:
= PWMx_CCRn / PWMx_ARR
DebugLab 发表于 2025-7-23 14:57
https://www.stcaimcu.com/forum.p ... id=19209&pid=177800
频率(PWM时钟使用SYSCLK):
现在是目测P2.2还没有输出
P2.0有输出的 天宁宁 发表于 2025-7-23 15:01
现在是目测P2.2还没有输出
P2.0有输出的
PWMA_CCER1=0x11
确实 修改一下有输出了
上午参考测试了很多例程
用|=n 也试过
没有效果搞得灰头土脸
我在试试
谢谢版主 DebugLab 发表于 2025-7-23 15:14
PWMA_CCER1=0x11
就是CC1E CC2E理解不明白 谢谢 天宁宁 发表于 2025-7-23 15:18
确实 修改一下有输出了
上午参考测试了很多例程
用|=n 也试过
仔细看数据手册
DebugLab 发表于 2025-7-23 15:34
仔细看数据手册
数据手册反反复复看了
有些BIT位的意思不是很明白
PWM的寄存器比较多
而且相互关联
只能一步一步摸索
页:
[1]