我正在研究电机控制应用程序,基本上,当我按下按钮时,电机将运行,并且我还在运行时测量电机电流,这样如果有任何过载我可以停止电机。
问题是如果有任何过载我可以停止电机,但响应时间更长,程序对突然的冲击没有反应。
是否可以并行运行两个回路,所以当我打开按钮时,一个回路将测量任何过载的电流,另一个回路将用于控制电机,这两个回路应该同时工作,这样我就会得到预期的响应时间..
我正在研究电机控制应用程序,基本上,当我按下按钮时,电机将运行,并且我还在运行时测量电机电流,这样如果有任何过载我可以停止电机。
问题是如果有任何过载我可以停止电机,但响应时间更长,程序对突然的冲击没有反应。
是否可以并行运行两个回路,所以当我打开按钮时,一个回路将测量任何过载的电流,另一个回路将用于控制电机,这两个回路应该同时工作,这样我就会得到预期的响应时间..
正如 g-makulik 在评论中发布的那样,您可以使用线程。或者您可以回退到在单个循环中维护状态的旧解决方案。不确定您拥有的 TI 是否支持 fork() 或线程,但如果不支持,这样的东西就会成为强有力的竞争者。
int need_to_monitor_motor = 1; int common_switch; // 如果是普通处理则为真 而 (need_to_monitor_motor) { common_switch = 1; // 允许共同处理 // 你可能需要做一些事情来避免占用处理器如果 // 其他进程正在运行。即使是最小的纳米睡眠。 // sched_yield() // 睡眠() sleep_or_processor_release(); 开关(电机状态) { 案例 MOTOR_OFF: need_to_monitor_motor = do_motor_off_stuff(); 休息; 案例 MOTOR_ON: need_to_monitor_motor = do_motor_on_stuff(); 休息; 默认 need_to_monitor_motor = Trouble__fix_it( &common_switch ); 休息; } 如果(common_switch) { do_common_processing(); } }
(注意,没有编译这个)
因此,您正在为 TI 处理器编写嵌入式 C 程序。现在的问题是:您是否启用了操作系统/多线程功能?大多数便宜的 TI 板都没有这种支持,它们的嵌入式程序以无限循环 while(1) 结束。所有实际工作都在中断处理程序中完成。在您的情况下,您可能可以使用一两个计时器。在 main 函数的开头初始化它们,并在定时器中断处理程序中做所有必要的事情。
因此,为您的电路板找到带有计时器的 TI 代码示例,并向其中添加您自己的逻辑。