Sam
actiondrv.cpp
- Committer:
- s0313045
- Date:
- 2020-09-13
- Revision:
- 2:611a5eb132a1
- Parent:
- 0:502b364c9f1d
File content as of revision 2:611a5eb132a1:
#include "mbed.h"
#include "actiondrv.h"
static char msgsetmode[] = {0x2B,0x60,0x60,0x03,0x00,0x00,0x00,0x00};
static char msgsetacc[] = {0x23,0x83,0x60,0x00,0x80,0x96,0x98,0x00};
static char msgsetdec[] = {0x23,0x84,0x60,0x00,0x80,0x96,0x98,0x00};
static char msgsetvel[] = {0x23,0xff,0x60,0x00,0x00,0x00,0x00,0x00};
//static char heartbeat[] = {0x2B,0x17,0x10,0x00,0x64,0x00,0x00,0x00};
static char msgenable[] = {0x01,0x00};
static char enablemotor[] = {0x2B,0x40,0x60,0x00,0x0F,0x00,0x00,0x00};
DigitalOut led1(LED1);
CAN can1(PA_11, PA_12, 500000);
int rpm_to_pulse_per_s = 500*4/60;
actionDrv::actionDrv(int _id)
{
id = _id;
}
void actionDrv::send(char* msg)
{
//if(can1.write(CANMessage(0x600+ id, msg)))
//{
// led1 = !led1;
// wait(0.05);
//}
while(!can1.write(CANMessage(0x600+ id, msg))) {wait(0.05);}
}
void actionDrv::Enable(){
//msgenable[1] = ((id >>24)& 0xFF);
//can1.write(CANMessage(0x000, msgenable));
//wait(0.2);
//send(enablemotor);
msgenable[1] = ((id >>24)& 0xFF);
while(!can1.write(CANMessage(0x000, msgenable)));
wait(0.2);
send(enablemotor);
}
void actionDrv::SetOperationalMode(){
send(msgsetmode);
}
void actionDrv::Configvelocity(int acc, int dec){
msgsetacc[4] = ((acc ) & 0xFF);
msgsetacc[5] = ((acc >> 8) & 0xFF);
msgsetacc[6] = ((acc >> 16) & 0xFF);
msgsetacc[7] = ((acc >> 24) & 0xFF);
msgsetdec[4] = ((dec ) & 0xFF);
msgsetdec[5] = ((dec >> 8) & 0xFF);
msgsetdec[6] = ((dec >> 16) & 0xFF);
msgsetdec[7] = ((dec >> 24) & 0xFF);
send(msgsetacc);
send(msgsetdec);
}
void actionDrv::SetVelocity(int vel){
//vel = vel*500*4/60; // rpm to pulse per s
vel = vel*rpm_to_pulse_per_s;
msgsetvel[4] = ((vel ) &0xFF);
msgsetvel[5] = ((vel >> 8) &0xFF);
msgsetvel[6] = ((vel >> 16) &0xFF);
msgsetvel[7] = ((vel >> 24) & 0xFF);
send(msgsetvel);
}
void actionDrv::send_mod(char* msg)
{
//if(can1.write(CANMessage(0x600+ id, msg)))
//{
// led1 = !led1;
//}
while(!can1.write(CANMessage(0x600+ id, msg)));
}
void actionDrv::SetVelocity_mod(int vel){
//vel = vel*500*4/60; // rpm to pulse per s
vel = vel*rpm_to_pulse_per_s;
msgsetvel[4] = ((vel ) &0xFF);
msgsetvel[5] = ((vel >> 8) &0xFF);
msgsetvel[6] = ((vel >> 16) &0xFF);
msgsetvel[7] = ((vel >> 24) & 0xFF);
send_mod(msgsetvel);
}
void actionDrv::stop(){
SetVelocity(0);
}