both motors

This commit is contained in:
sdes1
2025-11-10 17:40:57 +01:00
parent 039fafd2c4
commit cae559a7be
2 changed files with 47 additions and 32 deletions

View File

@@ -40,27 +40,37 @@ void InitDoneCallback(void * p_arg) {
timer_Init(); timer_Init();
uint16_t melody[][2] = {{440, 500}, {440, 500}, {440, 500}, {349, 350}, {523, 150}, {440, 500}, {349, 350}, {523, 150}, {440, 1000}, {659, 500}, {659, 500}, {659, 500}, {698, 350}, {523, 150}, {415, 500}, {349, 350}, {523, 150}, {440, 1000}};
while(1){ while(1){
for(int16_t i = -1000; i<=1000; i++){ for(uint8_t i=0; i<(sizeof(melody)/sizeof(melody[0])); i++){
CPU_SR cpu_sr; CPU_SR cpu_sr;
OS_ENTER_CRITICAL(); OS_ENTER_CRITICAL();
// This is a critcal section. Usefull for accessing global variables shared between tasks pidValue = melody[i][0];
pidValue = i;
OS_EXIT_CRITICAL(); OS_EXIT_CRITICAL();
timer_Task(0); timer_Task(0);
//UCOS_Printf("pid: %d\r\n", pidValue); OSTimeDly(melody[i][1]);
OSTimeDly(1);
}
for(int16_t i = 1000; i>=-1000; i--){
CPU_SR cpu_sr;
OS_ENTER_CRITICAL();
// This is a critcal section. Usefull for accessing global variables shared between tasks
pidValue = i;
timer_Task(0);
OS_EXIT_CRITICAL();
//UCOS_Printf("pid: %d\r\n", pidValue);
OSTimeDly(1);
} }
//for(int16_t i = -1000; i<=1000; i++){
// CPU_SR cpu_sr;
// OS_ENTER_CRITICAL();
// // This is a critcal section. Usefull for accessing global variables shared between tasks
// pidValue = i;
// OS_EXIT_CRITICAL();
// timer_Task(0);
// //UCOS_Printf("pid: %d\r\n", pidValue);
// OSTimeDly(1);
//}
//for(int16_t i = 1000; i>=-1000; i--){
// CPU_SR cpu_sr;
// OS_ENTER_CRITICAL();
// // This is a critcal section. Usefull for accessing global variables shared between tasks
// pidValue = i;
// timer_Task(0);
// OS_EXIT_CRITICAL();
// //UCOS_Printf("pid: %d\r\n", pidValue);
// OSTimeDly(1);
//}
} }

View File

@@ -23,8 +23,7 @@ static void motor_Set_Steering_Direction(uint8_t steeringDirection, int16_t *mot
static void motor_Set_Moving_Direction (u32 pin, int16_t value); static void motor_Set_Moving_Direction (u32 pin, int16_t value);
static void timer_gpio_Init(); static void timer_gpio_Init();
XTtcPs xttcps; XTtcPs xttcps[2];
XTtcPs_Config* TimerSetup;
XGpioPs xgpiops; XGpioPs xgpiops;
XGpioPs_Config* gpioCfg; XGpioPs_Config* gpioCfg;
@@ -33,14 +32,18 @@ extern int16_t pidValue;
void timer_Task(void *pdata) { void timer_Task(void *pdata) {
if(pidValue){ if(pidValue){
uint16_t interval = (64000/abs(pidValue)); uint16_t interval = 1.337*(64000/abs(pidValue));
uint8_t direction = pidValue<0; uint8_t direction = pidValue<0;
//UCOS_Printf("%d %d\r\n", direction, interval); //UCOS_Printf("%d %d\r\n", direction, interval);
//UCOS_Printf("counter value: %d\r\n", XTtcPs_GetCounterValue(&xttcps)); //UCOS_Printf("counter value: %d\r\n", XTtcPs_GetCounterValue(&xttcps));
timer_Stop(0);
timer_Stop(1); timer_Stop(1);
timer_Set_Interval_Length(0,interval);
timer_Set_Interval_Length(1,interval); timer_Set_Interval_Length(1,interval);
timer_Start(0);
timer_Start(1); timer_Start(1);
motor_Set_Moving_Direction(54, direction); motor_Set_Moving_Direction(54, direction);
motor_Set_Moving_Direction(55, !direction);
} }
else else
{ {
@@ -51,12 +54,8 @@ void timer_Task(void *pdata) {
/* * * intializes and starts two timers with respective puls generation on gpio pins * * */ /* * * intializes and starts two timers with respective puls generation on gpio pins * * */
int timer_Init(){ int timer_Init(){
UCOS_Print("Setting up Timer!\r\n"); UCOS_Print("Setting up Timer!\r\n");
TimerSetup = XTtcPs_LookupConfig(XPAR_PS7_TTC_0_DEVICE_ID);
XTtcPs_CfgInitialize(&xttcps, TimerSetup, TimerSetup->BaseAddress); timer_Dual_Timer_Setup();
XTtcPs_SetOptions(&xttcps, XTTCPS_OPTION_INTERVAL_MODE | XTTCPS_OPTION_MATCH_MODE);
XTtcPs_SetPrescaler(&xttcps, 8);
XTtcPs_SetMatchValue(&xttcps, 0, 1);
XTtcPs_SetInterval(&xttcps, 2);
timer_gpio_Init(); timer_gpio_Init();
motor_Set_Moving_Direction(54, 1); motor_Set_Moving_Direction(54, 1);
@@ -85,30 +84,36 @@ static void timer_gpio_Init(){
/* * * * * * sets up two timers by calling timer_Setup() for each wheel, connects and activates an interrupt to one of timers * * */ /* * * * * * sets up two timers by calling timer_Setup() for each wheel, connects and activates an interrupt to one of timers * * */
static int timer_Dual_Timer_Setup(void) static int timer_Dual_Timer_Setup(void)
{ {
timer_Setup(XPAR_PS7_TTC_0_DEVICE_ID);
timer_Setup(XPAR_PS7_TTC_1_DEVICE_ID);
} }
/* * * * * * sets up a timer counter device, initialize device, set options, set interval and prescaler value for given output frequency * * */ /* * * * * * sets up a timer counter device, initialize device, set options, set interval and prescaler value for given output frequency * * */
static int timer_Setup(int DeviceID) static int timer_Setup(int DeviceID)
{ {
XTtcPs_Config* TimerSetup = XTtcPs_LookupConfig(DeviceID);
XTtcPs_CfgInitialize(&xttcps[DeviceID], TimerSetup, TimerSetup->BaseAddress);
XTtcPs_SetOptions(&xttcps[DeviceID], XTTCPS_OPTION_INTERVAL_MODE | XTTCPS_OPTION_MATCH_MODE);
XTtcPs_SetPrescaler(&xttcps[DeviceID], 8);
XTtcPs_SetMatchValue(&xttcps[DeviceID], 0, 1);
XTtcPs_SetInterval(&xttcps[DeviceID], 2);
} }
/* * * starts timer number "Id" * * */ /* * * starts timer number "Id" * * */
static void timer_Start(uint32_t Id){ static void timer_Start(uint32_t Id){
XTtcPs_Start(&xttcps); XTtcPs_Start(&xttcps[Id]);
} }
/* * * stops timer number "Id" * * */ /* * * stops timer number "Id" * * */
static void timer_Stop(uint32_t Id){ static void timer_Stop(uint32_t Id){
XTtcPs_Stop(&xttcps); XTtcPs_Stop(&xttcps[Id]);
} }
/* * * sets new interval length and the correct matchvalue * * */ /* * * sets new interval length and the correct matchvalue * * */
static void timer_Set_Interval_Length(uint32_t Id, uint16_t interval_length){ static void timer_Set_Interval_Length(uint32_t Id, uint16_t interval_length){
if(XTtcPs_GetCounterValue(&xttcps) >= interval_length) if(XTtcPs_GetCounterValue(&xttcps[Id]) >= interval_length)
XTtcPs_ResetCounterValue(&xttcps); XTtcPs_ResetCounterValue(&xttcps[Id]);
XTtcPs_SetMatchValue(&xttcps, 0, interval_length/2); XTtcPs_SetMatchValue(&xttcps[Id], 0, interval_length/2);
XTtcPs_SetInterval(&xttcps, interval_length); XTtcPs_SetInterval(&xttcps[Id], interval_length);
} }