#define ENGINE_IN2A 25 //27 // pin P1.27
#define ENGINE_IN2B 29 // pin P1.29
-#define PWM_STEP ((CPU_APB_HZ / 20000)/100)
+#define PWM_STEP ((CPU_APB_HZ / 20000)/100 + 1)
//unsigned int engineStep = 0;
void engine_A_pwm(unsigned pwm)
{
if (pwm>100) pwm = 100;
- PWMMR2 = PWM_STEP * pwm;
+
+ if (IO1PIN & (1<<ENGINE_IN2A)) PWMMR2 = PWM_STEP * (100 - pwm);
+ else PWMMR2 = PWM_STEP * (pwm);
PWMLER |= PWMLER_LA2_m;
}
void engine_B_pwm(unsigned pwm)
{
if (pwm>100) pwm = 100;
- PWMMR4 = PWM_STEP * pwm;
+ if (IO1PIN & (1<<ENGINE_IN2B)) PWMMR4 = PWM_STEP * (100 - pwm);
+ else PWMMR4 = PWM_STEP * (pwm);
PWMLER |= PWMLER_LA4_m;
}
#include <periph/can.h>
#include <string.h>
#include <deb_led.h>
+#include <can_ids.h>
#include "uart.h"
#include "servo.h"
#include "powswitch.h"
can_msg_t rx_msg;
memcpy(&rx_msg, msg, sizeof(can_msg_t));
+
+
+
switch (rx_msg.id) { // demo sample parsing recieved message by ID
- case 0x00:
+ case CAN_SERVO:
+
+ set_servo(0, rx_msg.data[0]);
+ set_servo(1, rx_msg.data[1]);
+ set_servo(2, rx_msg.data[2]);
+
break;
- case 0x01:
- break;
+
default:
break;
}
-
+can_msg_t msg;
int main (void) {
set_servo(1, 0x80);
set_servo(2, 0x80);
- engine_A_dir(ENGINE_DIR_BW);//FW);
- engine_B_dir(ENGINE_DIR_FW);
+ engine_A_dir(ENGINE_DIR_FW);//FW);
+ engine_B_dir(ENGINE_DIR_BW);
engine_A_en(ENGINE_EN_ON);
engine_B_en(ENGINE_EN_ON);
- engine_A_pwm(70);
- engine_B_pwm(70);
-
+ engine_A_pwm(0);
+ engine_B_pwm(0);
+
+
+/* msg.id = 0xAA;
+ msg.flags = 0;
+ msg.dlc = 1;
+ msg.data[0] = 0x55;
+
+
+
+ // while(can_tx_msg(&msg));*/
while(1)
{
dummy_wait();
__deb_led_off(LEDG);
dummy_wait();
+
+
+
+
}
}
#define TIM_EMR_PIN_ON 1
#define TIM_EMR_PIN_OFF 0
+#define TIME20MS ((CPU_APB_HZ) / 50)
+#define SERVOTICK (((CPU_APB_HZ / 50) / 20) / 256)
+
-unsigned int time20ms = 0;
-unsigned int servotick = 0;
unsigned char servo[3];
T1EMR |= (TIM_EMR_PIN_ON<<0) | (TIM_EMR_PIN_ON<<1) | (TIM_EMR_PIN_ON<<3);
- T1MR0 = (servo[0] + 256) * servotick;
- T1MR1 = (servo[1] + 256) * servotick;
- T1MR3 = (servo[2] + 256) * servotick;
+ T1MR0 = (servo[0] + 256) * SERVOTICK;
+ T1MR1 = (servo[1] + 256) * SERVOTICK;
+ T1MR3 = (servo[2] + 256) * SERVOTICK;
if (T1IR != 4)
{
PINSEL1 &= ~(PINSEL_3 << 8);
PINSEL1 |= (PINSEL_1 << 8);
- time20ms = ((CPU_APB_HZ) / 50);
- servotick = (time20ms / 20) / 256;
servo[0] = 0;
servo[1] = 127;
servo[2] = 0xFF;
T1PR = 0;
- T1MR2 = time20ms;
- T1MR0 = (servo[0] + 256) * servotick;
- T1MR1 = (servo[1] + 256) * servotick;
- T1MR3 = (servo[2] + 256)* servotick;
+ T1MR2 = TIME20MS;
+ T1MR0 = (servo[0] + 256) * SERVOTICK;
+ T1MR1 = (servo[1] + 256) * SERVOTICK;
+ T1MR3 = (servo[2] + 256)* SERVOTICK;
T1MCR = (3<<6); // interrupt on MR1
T1EMR = (TIM_EMR_PIN_ON<<0) | (TIM_EMR_PIN_ON<<1) | (TIM_EMR_PIN_ON<<3) \