我是一名电气学生,想要使用arduino,因为它会产生用于驱动MOSFET的脉冲。我正在制造一台逆变器,想要产生脉冲。我和我有arduino。我的主要目标是:
1)一个软件中断用于下一个时间段的采样(这将改变..)。在三个周期之后,我将使用analogRead()时间段的新值并继续相同。
2)在一个时间周期内,由定时器通道TC0的RC计数设置,我想用适当的计数加载RA0和RB0,以获得具有不同占空比的输出脉冲(取决于RA0和RB0值)。
我编写了一个程序,用TC3提供软件中断,工作正常。即我能够为每个新的采样值自动将新值加载到RA0和RB0中(每3个周期新值到位,否则将加载相同的值)。 现在我也使用TC0(我用过Olavi Kamppari的库)来停止,加载新值和启动计时器。 当我在串口监视器中检查PIO_PB25B_TIOA0和PIO_PB27B_TIOB0时,我得到了33554432,134217728。
我真的很困惑。我期待输出1和0。我只想要TC0的两个脉冲而没有中断。我将ACPA值设置为3(Toggle)并且我也启用了计时器的时钟。但是我没有得到输出。
如果可能,请提供一个样本程序,可以输出PB25和PB27(TIOA0和TIOB0)的脉冲。非常感谢任何帮助。
感谢您阅读我的问题。
谢谢。
答案 0 :(得分:0)
以下草图在TIOA6
(内存中的引脚5)
我即将发布一个关于相同代码的问题 - 我想要达到8(和一点点)MHz但是已经碰到了概念砖墙!
请注意,这正在开发中 - 不使用IRQ处理程序 - PMC_Enable_Periph
应该引用ID_TC6
(我相信) - 然后IRQ处理程序可以放在垃圾箱中历史!
void TC6_Handler()
{
TC_GetStatus(TC2, 0);
}
void startTimer(Tc *tc, uint32_t channel, IRQn_Type irq) {
pmc_set_writeprotect(false);
pmc_enable_periph_clk((uint32_t)irq);
TC_Configure(tc, channel,
TC_CMR_WAVE |
TC_CMR_WAVSEL_UP_RC |
TC_CMR_TCCLKS_TIMER_CLOCK1|
TC_CMR_ACPA_TOGGLE ); // RC compare TOGGLES TIOA)smiley-wink;
TC_SetRA(tc, channel, 1); //50% high, 50% low
TC_SetRC(tc, channel, 1);
PIO_Configure(PIOC,
PIO_PERIPH_B,
PIO_PC25B_TIOA6,
PIO_DEFAULT);
TC_Start(tc, channel);
}
void setup(){
startTimer(TC2, 0, TC6_IRQn);
}
void loop(){
}