Avoir à et devoir s'emploient tous les deux pour exprimer l'obligation. Cependant j'y mettrais une nuance.
Avoir à :
Obligation qu'on s'impose à soi-même et la notion de devoir est plus ou moins contraignante selon le verbe qui suit.
« Je ne peux pas aller au cinéma ce soir, j'ai du ménage à faire. » (Le ménage ce n'est pas vital, je m'impose moi-même la contrainte)
Exemple donné dans le TFL :
J'ai maintenant à vous expliquer pourquoi je vous écris de Tours et
non de Tocqueville où je devrais et voudrais être. Tocqueville Correspondance [avec Gobineau], 1853, p. 200.
Devoir :
Obligation en général imposée par une contrainte extérieure : morale, loi, règlement, etc...
« Je ne peux pas aller au cinéma ce soir, je dois garder les 10 euros qui me restent pour acheter à manger à mes enfants. » (Moralement j'y suis obligé).
Ceci dit ça dépend du contexte et je ne vois pas de grande différence entre :
« J'aurais à changer de voiture, je n'en aurais pas les moyens. »
et
« Je devrais changer de voiture, je n'en aurais pas les moyens. »
Both, avoir à and devoir express obligation. With a nuance.
Avoir à is an obligation one brings upon themselves. (In English you'd use "have to")
Devoir is more of a moral obligation that is brought on to you by the outside world, a set of rules imposed by the workplace, the law, etc...(In English you'd use "must" rather than "have to").