凌鸥MCPWM输出全0全1
in main.c
volatile int i;
SYS_PROT = PSW_PROT;
SYS_CLK_CFG = 0x01FF;
SYS_SFT_RST = 0x00FF;
SYS_SFT_RST = 0x0000;
SYS_CLK_FEN = 0x0008;
//mcpwm config
MCPWM_PRT = 0x0000DEAD; //enter password to unlock write protection
MCPWM_TH = 0x00000BCD;
//-------
//all 1
MCPWM_TH00 = -0x00000BCD;
MCPWM_TH01 = 0x00000BCD;
MCPWM_DTH00 = 0;
MCPWM_DTH01 = 0;
MCPWM_SDCFG = 0x1 << 4; //t0 update
MCPWM_FAIL |= 0x00000040; //moe
MCPWM_IO01 |= 0x00000000; //cmp mode
//-------
MCPWM_TCLK = 0x0000000C; //ton, tclk_en, tclk_div, no div
MCPWM_AUEN = 0x3; //enable auto update of th00 & th01
//enable t1 event irq
MCPWM_IE = 0x2;
MCPWM_UPDATE = 0x0000FFFF; //write corresponding bit to trigger update
//MCPWM_PRT = 0x0000CAFE; //write any value other than 0xDEAD to enable write protection
NVIC_EnableIRQ(MCPWM_IRQn); //enable the adc0 interrupt
__enable_irq(); //clr PRIMASK
SCB->SCR &= ~0x00000010; //clr SEVONPEND
GPIO1_POE = 0x1 << 4 | 0x1 << 5;
GPIO1_F7654 = 0x0033;
i = 10;
while(i--){
while(0x1 != (0x1 & MCPWM_IF)); //wait for MCPWM_IF -TH event
MCPWM_IF |= 0x1;
}
PASS;
in interrupt.c
void MCPWM_IRQHandler(void)
{
MCPWM_IF |= 0xFF;
GPIO0_PDO = ~GPIO0_PDO;
if(GPIO0_PDO==0){
if(MCPWM_TH00 != MCPWM_TH){
GPIO1_PDO = ~GPIO1_PDO;
MCPWM_TH00 = MCPWM_TH;
}
else{
MCPWM_TH00 = -MCPWM_TH;
GPIO2_PDO = ~GPIO2_PDO;
}
}
}
综上,
TH00 = TH01 可实现mcpwm输出全0
TH00 = -TH TH01 = TH,可实现mcpwm输出全1 输出全0或全1的意义是什么? chenqianqian 发表于 2023-3-21 20:01
输出全0或全1的意义是什么?
电机控制专用,停机需要全0或者全1 chenqianqian 发表于 2023-3-21 20:01
输出全0或全1的意义是什么?
还比如电机刹车的时候也需要输出全0或者全1,是全0还是全1主要看驱动极性啦 我不能理解的就是既然用pwm全输出1或者0,那么用pwm的目的是什么呢 tpgf 发表于 2023-4-12 16:21
我不能理解的就是既然用pwm全输出1或者0,那么用pwm的目的是什么呢
不是全程都是全0或者全1 是说的某一个时间段 NIMIJACK 发表于 2023-3-27 11:14
电机控制专用,停机需要全0或者全1
请问在刹车或者加速的时候我们需要如何配置呢 晓伍 发表于 2023-4-12 16:56
请问在刹车或者加速的时候我们需要如何配置呢
这种是不是得两路pwm配合使用了呢 从全0或者全1状态退出的话 还需要再次配置吗 单片机里边的时序可以写的非常复杂吗 自动的停机啊刹车啊 加速啊之类的
页:
[1]