主题中讨论的其他器件: UNIFLASH、 HALCOGEN
工具/软件:Code Composer Studio
你好
需要将哪个文件加载到 TMS570lc4357控制器以驱动电磁阀类型的机械设备、如泵、喷油器等... hex 文件或 bin 文件。
请就此作出答复。
谢谢您、
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
你好
需要将哪个文件加载到 TMS570lc4357控制器以驱动电磁阀类型的机械设备、如泵、喷油器等... hex 文件或 bin 文件。
请就此作出答复。
谢谢您、
您好!
TI CCS IDE 可以生成 ELF 格式的*。out 文件、十六进制文件(Motorola 格式、Intel 格式、TI 格式和 ASCII 文本)和二进制文件。
TI CCS Uniflash 可以将上述所有格式加载到 TI MCU 的闪存中。 Uniflash 具有 GUI、命令行和脚本接口。 CCS Uniflash 免费提供。
https://www.ti.com/tool/UNIFLASH
电磁阀内部有一个线圈。 通电后、它会将活塞拉入其中、断电后、它会将活塞推回到上一个位置。 使用 PWM 控制电磁阀是可行的。 可以对 TMS570LC43x 器件上的 ePWM 模块和 N2HET 模块进行编程、以生成具有指定周期和占空比的 PWM 信号。
尊敬的先生:
我可以使用以下提到的代码来控制传动器吗?
我是否可以使用下面提到的代码来计算齿轮(触发轮)上的齿数?
如果不是,请提供一个示例代码来计算相同的....
代码:
int main (空)
{
/*用户代码开始(3)*/
/*启用 CPU IRQ 中断*/
_enable_interrupt_();
/*根据 HalCoGen 设置初始化 NHET1 */
hetInit();
#if 0 /* RTI 的目的是在恒定速度、加速度和之间更改速度模式
和减速自动*/
/*初始化 RTI 驱动程序*/
rtiInit();
/*启用 RTI 比较0中断通知*/
rtiEnableNotification (rtiNOTIFICATION_COMPARE0);
/*启动 RTI 计数器块0 */
/**-设置比较0值。 此值与选定的自由运行计数器进行比较。 *
rtiREG1->CMP[0U].Compx *=持续时间;
/**-安装程序更新比较0值。 该值将添加到每个比较匹配的比较0值中。 *
rtiREG1->CMP[0U].UCPx *=持续时间;
rtiStartCounter (rtiCOUNTER_BLOCK0);
#endif
/*初始化 HWAG */
hwagInit();
hwagREG1->HWATHNB = 57;//一个60-2齿轮的齿总数
hwagREG1->HWASTWD = 4;//步长宽度= 64
hwagREG1->HWAGCR2 = 0x00010001;//启动 HWAG 并启用关键搜索
hwagREG1->HWAENASET = 0x10;//启用 PCNT (n)> 2 x PCNT (n-1)中断,启用未找到的单一性中断
/*根据宏设置配置 NHET1的其他设置*/
configNHET1();
while (1);
/*用户代码结束*/
}
/*用户代码开始(4)*/
/*
*只要一个 PWM 周期、NHET1 CNT 指令就会生成中断
*已完成
*
uint32索引= 0;
uint32 heel_spin_count = 0;
void hetNotification (hetBASE-t * het、uint32偏移)
{
uint32 cnt_max_period=0;
/*速度= 0:恒定速度
*速度= 1:减速
*速度= 2:加速度
*当前速度变量硬编码为一种特定模式。 速度值
*将在 rtiNotification 中根据 RTI 中断确定。
*
速度= 0;
如果(速度= 0){
CNT_max_period = hetRAM1->Instruction [Phet_L03_0].Control;
}否则,如果(速度==1){
CNT_MAX_PERIOD =(uint32)(hetRAM1->Instruction [Phet_L03_0].Control *(1 + DEC_RATE));
}否则{
CNT_MAX_PERIOD =(uint32)(hetRAM1->Instruction [Phet_L03_0].Control *(1 - ACC_RATE));
}
if (cnt_max_period > CNT_MAX_Bound){
CNT_max_period = CNT_MAX_Bound;
}
if (cnt_max_period < CNT_min_bound){
CNT_max_period = CNT_min_bound;
}
if ((het =hetREG1)&& offset ==(Phet_L01_0+1))
{
如果(索引==59)
{
索引= 0;
Wheel_spin_count++;
hetRAM1->Instruction [Phet_L03_0].Control =(uint32) cnt_max_period * 3 + 0;
}否则(((索引= 1)&&(WHEEL_SPIN_COUNT > 0))
{
hetRAM1->Instruction [Phet_L03_0].Control =(uint32)(cnt_max_period / 3);
}否则
{
hetRAM1->Instruction [Phet_L03_0].Control =(uint32) cnt_max_period;
}
索引++;
}
/*将50%占空比加载到 NHET 程序*/
hetRAM1->Instruction [Phet_L01_0].Data = cnt_max_period << 6;// cnt_max_period * 128/2
}
uint32 hwag_int_count = 0;
void hwagnotification (hwagbase_t * hwag、uint32偏移)
{
hwag_int_count++;
如果((hwag ==hwagREG1)&& offset == 5){//PCNT (n)> 2 x PCNT (n-1)
gioSetBit (hetPORT1、12、1);//在进入中断时设置 NHET1[12]以进行调试观察
hwagREG1->HWAGCR2 = 0x00010000;//禁用 HWAG 运行
hwagREG1->HWAACNT = 0;//重置 ACNT
hwagREG1->HWATHVL = 0;//重置齿数
hetRAM1->Instruction [Phet_L04_0].Data = 0;//在角度模式中复位 NHET CNT 数据字段
// hwagREG1->HWAENACLR = 0x10;//禁用 PCNT (n)> 2 x PCNT (n-1)中断
hwagREG1->HWAGCR2 = 0x00010001;//启动 HWAG
uint32 i;
对于(i=0;i<100;i++);
gioSetBit (hetPORT1、12、0);//在退出中断时清除 NHET1[12]以进行调试观察
}
}
/* configureNHET1将选定的 NHET1引脚配置为输出 PWM。 它
*还将初始 PWM 周期和占空比加载到 NHET1中
* RAM
*
void configNHET1()
{
/*将选定的引脚设置为输出。 *
hetREG1->DIR =(1 << NHET1_PIN_PWM)|(1 << NHET1_FANT_WHET)|(1 << 12);// pin12用于观察中断
hetREG1->INTENAS =(1 << Phet_L01_0);
/*根据定义的宏将 PWM 周期加载到 CNT 指令中*/
hetRAM1->Instruction [Phet_L03_0].Control =(uint32)(CNT_MAX_PERIOD)|(hetRAM1->Instruction [Phet_L03_0].Control & 0xFFFD0000);
/*配置引脚编号以输出 PWM */
hetRAM1->Instruction [Phet_L01_0].Control =(hetRAM1->Instruction [Phet_L01_0].Control & 0xFFFFE0FF)|(NHET1_FANT_WHEEL<< 8);
/*将50%占空比加载到 NHET 程序*/
hetRAM1->Instruction [Phet_L01_0].Data = CNT_MAX_PERIOD * 128 / 2;
}
uint32计数= 0;
void rtiNotification (rtibase_t * rtiREG、uint32通知)
{
速度=计数% 3;
count++;
}
/*用户代码结束*/